import plugin from '../../../lib/plugins/plugin.js'
import { segment } from "oicq";
import fetch from 'node-fetch'
import { Config} from '../components/index.js'
import fs from 'fs'
import YAML from 'yaml'

const _path = process.cwd();

let path='./plugins/huasheng/config/ai关闭_群号.yaml'
let path1='./plugins/huasheng/config/ai屏蔽词.yaml'


if (!fs.existsSync(path)) {fs.writeFileSync(path,'')}
if (!fs.existsSync(path1)) {fs.writeFileSync(path1,'')}

export class ai extends plugin {
  constructor () {
    super({
      /** 功能名称 */
      name: '<huasheng>小爱ai',
      /** 功能描述 */
      dsc: '简单开发示例',
      /** https://oicqjs.github.io/oicq/#events */
      event: 'message',
      /** 优先级，数字越小等级越高 */
      priority: 999999999999999999,//谁再和我说ai顶掉了命令，直接叉出去~
      rule: [
       {
          /** 命令正则匹配 */
          reg: '^(本|此)群聊?ai插嘴概率(\\d)*(％|%)?$',
          /** 执行方法 */
          fnc: 'gailv',permission: 'master'//绝对主人限制
        },{
          /** 命令正则匹配 */
          reg: '^ai语音概率(\\d)*(％|%)?$',
          /** 执行方法 */
          fnc: 'gl',permission: 'master'//绝对主人限制
        },{
          /** 命令正则匹配 */
          reg: '^ai屏蔽词?列表$',
          /** 执行方法 */
          fnc: 'pblb'
        },{
          /** 命令正则匹配 */
          reg: '^ai(不|取消)?屏蔽(.*)$',
          /** 执行方法 */
          fnc: 'pb',permission: 'master'//绝对主人限制
        },
        {
          /** 命令正则匹配 */
          reg: '^(本|此)群聊?(禁用|启用)ai$',
          /** 执行方法 */
          fnc: 'qunl',permission: 'master'//绝对主人限制
        },{
          /** 命令正则匹配 */
          reg: '^私聊(禁用|启用)ai$',
          /** 执行方法 */
          fnc: 'sil',permission: 'master'//绝对主人限制
        },
        {
          /** 命令正则匹配 */
          reg: '',
          /** 执行方法 */
          fnc: 'xiaoai'
        }
      ]
    })
  }
 async gailv (e) {
    if(!Config.getConfig('set','pz')['ai']) {return false}
	 if(e.msg.includes('ai插嘴概率')){
		let gailv = e.msg.replace(/此|本|群|聊|ai插嘴概率|%|％/g,'').trim();
	     gailv = Number(gailv)
		 if(gailv > 100){
			 e.reply('最高100~')
			 return
		 }
		  if(gailv < 0){
			 e.reply('不可以低于0!')
			 return
		 }
         await  redis.set(`aigailv:ai:${e.group_id}`, gailv)
		await e.reply(`群号${e.group_id},ai插嘴概率成功设置为${gailv}%`)
		 
	 }
	 
	 
 }
 //群聊
 async qunl(e) {
 if(!Config.getConfig('set','pz')['ai']) {return false}
 
 let data=await getread()
      if (!data) data= [];
      if (data.indexOf(e.group_id) == -1&&e.msg.includes('禁用')){
     await data.push(e.group_id)
     await e.reply('好的，这个群不再启用ai~')
      }
      if (data.indexOf(e.group_id)!== -1&&e.msg.includes('启用')){
     await data.splice(data.indexOf(e.group_id), 1)//位置索引，删除1个
     await e.reply('好的~已在本群启用ai')
      }
      getwrite(data)
 
 }
 
 //屏蔽
 async pb(e) {
 if(!Config.getConfig('set','pz')['ai']) {return false}
let mm=e.msg.replace(/ai|不|屏蔽/g,'')
 let data=await getread1()
      if (!data) data= [];
      if (data.indexOf(mm) == -1&&e.msg.includes('屏蔽')){
     await data.push(mm)
     await e.reply(`好的，ai已屏蔽有【${mm}】的语句~`)
      }
      if (data.indexOf(mm)!== -1&&e.msg.includes('不屏蔽')){
     await data.splice(data.indexOf(mm), 1)//位置索引，删除1个
     await e.reply(`好的~,ai已不再屏蔽有【${mm}】的语句`)
      }
      if (data.indexOf(mm)!== -1&&e.msg.includes('取消屏蔽')){
     await data.splice(data.indexOf(mm), 1)//位置索引，删除1个
     await e.reply(`好的~,ai已不再屏蔽有【${mm}】的语句`)
      }
    await getwrite1(data)
  return true
 }
 
 
 
 
 //私聊
 async sil(e) {
 if(!Config.getConfig('set','pz')['ai']) {return false}
if(e.msg.includes('启用')){
       await  redis.set('aisl:ai', '1')
       await  e.reply('已启用私聊ai~')
      } else if(e.msg.includes('禁用')){
       await  redis.set('aisl:ai', '0')
        await  e.reply('已禁用私聊ai~')
      }
      return true


}


 async gl (e) {
 if(!Config.getConfig('set','pz')['ai']) {return false}
   let 概率 = e.msg.replace(/ai语音概率|%|％/g,'').trim()
     概率 = Number(概率)
		 if(概率 > 100){
			 e.reply('最高100~')
			 return
		 }
		  if(概率 < 0){
			 e.reply('不可以低于0!')
			 return
		 }
         await  redis.set('aiyuy', 概率)
		await e.reply(`ai语音概率成功设置为${概率}%`)
      return true
}


async pblb(e){
if(!Config.getConfig('set','pz')['ai']) {return false}
 let data = getread1()
 let msg = ['ai目前没有屏蔽词哟~']
 if(data){
 data.map((v,i)=>{
 msg[0]='以下是ai屏蔽词\n'
 msg.push(`${i+1},${v}\n`)
 })
 }
 let forwardMsg = {
      message: msg,
      nickname: Bot.nickname,
      user_id: Bot.uin
    }

    if (e.isGroup) {
      forwardMsg = await e.group.makeForwardMsg(forwardMsg)
    } else {
      forwardMsg = await e.friend.makeForwardMsg(forwardMsg)
    }
forwardMsg.data = forwardMsg.data
      .replace(/\n/g, '')
      .replace(/<title color="#777777" size="26">(.+?)<\/title>/g, '___')
      .replace(/___+/, `<title color="#777777" size="26">(˃ ⌑ ˂ഃ )ai屏蔽词列表</title>`)
    //发送消息
    e.reply(forwardMsg)
 }
  




  async xiaoai (e) {
if(!Config.getConfig('set','pz')['ai']) {return false}
  //过滤信息
if (!e.msg || e.msg.charAt(0) == '#') {
		    return  false
		     }
		     
//判断屏蔽
let m = await getread1()
try {
  for(let mmmm of m) {
       if(e.msg.includes(mmmm)){
           return false
      }
}
}catch (e){}
  //判断群
  if(e.isGroup){
try {
  let group = await getread()
        for (let qqq of group) {
          if(e.group_id == qqq){
           return false
          }
  }
  }catch (e){}
  //判断插嘴概率
  let gailv = await  redis.get(`aigailv:ai:${e.group_id}`)
  let sz = Math.ceil(Math.random()* 100)
   if(!gailv){gailv=0}
   if(gailv>sz||gailv==100){
   answer(e)
   return
   }
  }


//过滤文字
if(e.msg.includes('疫情')){
       return false
      }


 //过滤100以内的数字，避免与小飞的点歌序号起冲突
 if(/^([0-9]|[0-9][0-9])$/.test(this.e.msg)){
		return false
		}
		
//避免 群友引用回复机器人发的图片 触发ai回复
if(e.source){
	if (/^\[图片]$/.test(e.source.message)) {
    return 
 }}
 
 //判断私聊
 if(e.isPrivate){
   let sl = await  redis.get('aisl:ai')
   if(sl==0){
   return false
   }
 }

 //是私聊或者at或者带机器人名字必定ai回复
 let name =Config.getConfig('set','mz')['botname']
 if(e.isPrivate||e.msg.includes(name) ||(e.atBot && e.msg)){
       answer(e)
   	 return true
   	 }
}
}

async function answer(e) {
    let name =Config.getConfig('set','mz')['botname']
    e.msg=e.msg.replace(`${name}`, "小爱")
    let res = await(await fetch(`http://api.duozy.cn/api/xiaoai.php?msg=${e.msg}`)).json()
    //判断语音
    let yy =await redis.get('aiyuy')
    if(!yy){yy=0}
    if(res)	{
        let msg = res.text.replace(/菲菲|小思|小爱/g,name).replace(/小爱/g, name).replace(/小米/g, '').replace(/对不起，暂不支持该功能，你和我聊点儿别的吧/g,`${name}听不明白(⇀‸↼‶)`)
           
      let tt = Math.ceil(Math.random()* 100)
        if(yy>tt||yy==100){
          msg = res.mp3
          e.reply(segment.record(msg))
          return true
        }else{
        e.reply(msg)
        return 
        }
       }	
       
}





/** 读取 */
function getread() {
  try {
    var fileContents = fs.readFileSync(path, 'utf8');
  } catch (e) {
    console.log(e);
    return false;
  }
  //转换
  return YAML.parse(fileContents);
}

/** 写入 */
function getwrite(data) {
  try {
    //转换
    let yaml = YAML.stringify(data);
    fs.writeFileSync(path, yaml, 'utf8');
    return true
  } catch (e) {
    //错误处理
    console.log(e);
    return false
  }
}



//读取屏蔽
function getread1() {
  try {
    var fc = fs.readFileSync(path1, 'utf8');
  } catch (e) {
    console.log(e);
    return false;
  }
  //转换
  return YAML.parse(fc);
}

//写入屏蔽
function getwrite1(data) {
  try {
    //转换
    let yaml = YAML.stringify(data);
    fs.writeFileSync(path1, yaml, 'utf8');
    return true
  } catch (e) {
    //错误处理
    console.log(e);
    return false
  }
}

